package netty.protobuf2;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.util.Random;

/**
 * @author 帅小伙
 * @date 2022/1/16
 * @description
 */
public class NettyClientHandler extends ChannelInboundHandlerAdapter {

    // 通道就绪 就会触发
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

       //随机生成一个对象

        int random = new Random().nextInt(3);

        MyDataInfoPOJO.MyMessage message = null;

        if(random == 0){
            // 发送学生
            message = MyDataInfoPOJO.MyMessage.newBuilder()
                    .setDataType(MyDataInfoPOJO.MyMessage.DataType.StudentTYPE)
                    .setStudent(MyDataInfoPOJO.Student.newBuilder().setId(2).setName("mubei").build()).build();
        }else{
            message = MyDataInfoPOJO.MyMessage.newBuilder()
                    .setDataType(MyDataInfoPOJO.MyMessage.DataType.WorkerType)
                    .setWorker(MyDataInfoPOJO.Worker.newBuilder().setId(2).setName("ah").build()).build();
        }
        ctx.writeAndFlush(message);
    }


    // 通道有读取事件时  触发
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf buf = (ByteBuf)msg;
        System.out.println("服务器回复的消息:"+buf.toString(CharsetUtil.UTF_8));
        System.out.println("服务器地址"+ctx.channel().remoteAddress());
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close();
    }
}
